Woodstack 8, originally uploaded by stevenjbaker (creative-common)

Klasterisasi data menggunakan KMeans merupakan algoritma yang sangat populer karena kemudahannya. Data akan dikelompokkan berdasarkan kedekatan masing-masing titik data pada titik beratnya. Secara umum, data yang jaraknya dekat biasanya mempunyai kesamaan yang lebih besar daripada data yang jaraknya jauh. Jarak antar data biasanya diukur menggunakan Eucledian Distance.

Klasterisasi data KMeans di Python dapat dilakukan dengan mengimpor pustaka KMeans dari scikitlearn cluster

Breast Cancer Wisconsin (Diagnostic) Data Set

Diagnosis dan deteksi dini kanker payudara dengan mendiagnosis massa payudara dari Aspirasi Jarum Halus (FNA) telah dibuat yang memungkinkan diagnosis FNA payudara bahkan oleh pengguna yang tidak terlatih. Sistem ini digunakan di Rumah Sakit University of Wisconsin. Antarmuka grafis dikembangkan untuk menghitung fitur wilayah kecil dari FNA didigitalkan, menghasilkan 640 × 400, 8-bit-per-pixel gambar grayscale. Program analisis gambar, program Xcyt digunakan untuk fitting kurva untuk menentukan batas-batas inti. Sebagian dari gambar yang diproses ditunjukkan pada Gambar 1. Sepuluh fitur dihitung untuk masing-masing inti: luas, jari-jari, keliling, simetri, jumlah dan ukuran cekung, dimensi fraktal (batas), kekompakan, kehalusan dan tekstur. Data diagnosis berisi simbol B dan M yang mewakili Benign/Sehat dan Malignant/Sakit.

image.png

Gambar 1: Gambar FNA yang diperbesar dari sel kanker payudara ganas

In [1]:
from sklearn.cluster import KMeans
In [2]:
import pandas as pd
In [3]:
names=['ID','Diagnosis','radius','texture','perimeter','area','smoothness','compactness','concavity','concave','symmetry','fractal','sradius','stexture','sperimeter','sarea','ssmoothness','scompactness','sconcavity','sconcave','ssymmetry','sfractal','wradius','wtexture','wperimeter','warea','wsmoothness','wcompactness','wconcavity','wconcave','wsymmetry','wfractal']
In [4]:
df1=pd.read_csv('https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/wdbc.data',names=names)
In [5]:
df=df1.iloc[:,1:12]
In [6]:
df.head()
Out[6]:
Diagnosis radius texture perimeter area smoothness compactness concavity concave symmetry fractal
0 M 17.99 10.38 122.80 1001.0 0.11840 0.27760 0.3001 0.14710 0.2419 0.07871
1 M 20.57 17.77 132.90 1326.0 0.08474 0.07864 0.0869 0.07017 0.1812 0.05667
2 M 19.69 21.25 130.00 1203.0 0.10960 0.15990 0.1974 0.12790 0.2069 0.05999
3 M 11.42 20.38 77.58 386.1 0.14250 0.28390 0.2414 0.10520 0.2597 0.09744
4 M 20.29 14.34 135.10 1297.0 0.10030 0.13280 0.1980 0.10430 0.1809 0.05883
In [7]:
df.to_csv('wdbc10.csv')
In [8]:
df.describe()
Out[8]:
radius texture perimeter area smoothness compactness concavity concave symmetry fractal
count 569.000000 569.000000 569.000000 569.000000 569.000000 569.000000 569.000000 569.000000 569.000000 569.000000
mean 14.127292 19.289649 91.969033 654.889104 0.096360 0.104341 0.088799 0.048919 0.181162 0.062798
std 3.524049 4.301036 24.298981 351.914129 0.014064 0.052813 0.079720 0.038803 0.027414 0.007060
min 6.981000 9.710000 43.790000 143.500000 0.052630 0.019380 0.000000 0.000000 0.106000 0.049960
25% 11.700000 16.170000 75.170000 420.300000 0.086370 0.064920 0.029560 0.020310 0.161900 0.057700
50% 13.370000 18.840000 86.240000 551.100000 0.095870 0.092630 0.061540 0.033500 0.179200 0.061540
75% 15.780000 21.800000 104.100000 782.700000 0.105300 0.130400 0.130700 0.074000 0.195700 0.066120
max 28.110000 39.280000 188.500000 2501.000000 0.163400 0.345400 0.426800 0.201200 0.304000 0.097440
In [9]:
import seaborn as sb
In [10]:
g=sb.pairplot(df, hue='Diagnosis')
g.map_lower(sb.kdeplot)
g.map_diag(sb.kdeplot)
Out[10]:
<seaborn.axisgrid.PairGrid at 0x104ee09c0f0>

Koefisien korelasi

dari Wikipedia, ensiklopedia gratis

Koefisien korelasi adalah ukuran numerik dari beberapa jenis korelasi , yang berarti hubungan statistik antara dua variabel . [1] Variabel dapat berupa dua kolom dari kumpulan data pengamatan tertentu, sering disebut sampel , atau dua komponen variabel acak multivariat dengan distribusi yang diketahui .

Ada beberapa jenis koefisien korelasi, masing-masing dengan definisi dan jangkauan kegunaan dan karakteristik masing-masing. Mereka semua mengasumsikan nilai dalam kisaran dari −1 hingga +1, di mana ± 1 menunjukkan kesepakatan terkuat dan 0 ketidaksetujuan sekuat mungkin. [2] Sebagai alat analisis, koefisien korelasi menyajikan masalah-masalah tertentu, termasuk kecenderungan beberapa jenis untuk terdistorsi oleh pencilan dan kemungkinan salah digunakan untuk menyimpulkan hubungan sebab akibat antara variabel.

In [11]:
df.corr()
Out[11]:
radius texture perimeter area smoothness compactness concavity concave symmetry fractal
radius 1.000000 0.323782 0.997855 0.987357 0.170581 0.506124 0.676764 0.822529 0.147741 -0.311631
texture 0.323782 1.000000 0.329533 0.321086 -0.023389 0.236702 0.302418 0.293464 0.071401 -0.076437
perimeter 0.997855 0.329533 1.000000 0.986507 0.207278 0.556936 0.716136 0.850977 0.183027 -0.261477
area 0.987357 0.321086 0.986507 1.000000 0.177028 0.498502 0.685983 0.823269 0.151293 -0.283110
smoothness 0.170581 -0.023389 0.207278 0.177028 1.000000 0.659123 0.521984 0.553695 0.557775 0.584792
compactness 0.506124 0.236702 0.556936 0.498502 0.659123 1.000000 0.883121 0.831135 0.602641 0.565369
concavity 0.676764 0.302418 0.716136 0.685983 0.521984 0.883121 1.000000 0.921391 0.500667 0.336783
concave 0.822529 0.293464 0.850977 0.823269 0.553695 0.831135 0.921391 1.000000 0.462497 0.166917
symmetry 0.147741 0.071401 0.183027 0.151293 0.557775 0.602641 0.500667 0.462497 1.000000 0.479921
fractal -0.311631 -0.076437 -0.261477 -0.283110 0.584792 0.565369 0.336783 0.166917 0.479921 1.000000
In [12]:
corr=df.corr()
import matplotlib.pyplot as plt
plt.figure(figsize=(12,12))
sb.set(font_scale=1.25)
sb.heatmap(corr, square=True, annot=True, fmt='.2g', cmap='viridis', linewidths=1)
Out[12]:
<matplotlib.axes._subplots.AxesSubplot at 0x104f3f18470>
In [13]:
plt.figure(figsize=(15,15))
sb.set(font_scale=1.2)
sb.clustermap(corr, square=True, annot=True, fmt='.2g', cmap='viridis', linewidths=1)
Out[13]:
<seaborn.matrix.ClusterGrid at 0x104f69a1da0>
<Figure size 1080x1080 with 0 Axes>
In [14]:
X=df.iloc[:,1:12]
X.head()
Out[14]:
radius texture perimeter area smoothness compactness concavity concave symmetry fractal
0 17.99 10.38 122.80 1001.0 0.11840 0.27760 0.3001 0.14710 0.2419 0.07871
1 20.57 17.77 132.90 1326.0 0.08474 0.07864 0.0869 0.07017 0.1812 0.05667
2 19.69 21.25 130.00 1203.0 0.10960 0.15990 0.1974 0.12790 0.2069 0.05999
3 11.42 20.38 77.58 386.1 0.14250 0.28390 0.2414 0.10520 0.2597 0.09744
4 20.29 14.34 135.10 1297.0 0.10030 0.13280 0.1980 0.10430 0.1809 0.05883
In [15]:
Y=df['Diagnosis']
Y.head()
Out[15]:
0    M
1    M
2    M
3    M
4    M
Name: Diagnosis, dtype: object
In [16]:
from sklearn.preprocessing import LabelEncoder
In [17]:
lbe=LabelEncoder().fit(Y)
In [18]:
Y=lbe.transform(Y)
In [19]:
Y
Out[19]:
array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1,
       1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1,
       0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1,
       0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0,
       0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1,
       1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0,
       0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1,
       1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1,
       0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0,
       0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0,
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1,
       1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1,
       1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1,
       0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0,
       0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1,
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0,
       0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,
       0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
       0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0,
       0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0])

Nilai 1 pada Data Diagnosis mewakili Malignat sedang nilai 0 mewakili Benign,

In [20]:
kmeans=KMeans(n_clusters=2)
In [21]:
kmeans.fit(X)
Out[21]:
KMeans(algorithm='auto', copy_x=True, init='k-means++', max_iter=300,
       n_clusters=2, n_init=10, n_jobs=None, precompute_distances='auto',
       random_state=None, tol=0.0001, verbose=0)
In [22]:
y_kmeans=kmeans.predict(X)
In [23]:
centers=kmeans.cluster_centers_
In [24]:
plt.figure(figsize=(12,12))
plt.scatter(X.iloc[:,1], X.iloc[:,2], c=y_kmeans, s=100, cmap='viridis')
plt.scatter(centers[:,1], centers[:,2], c='red', s=10000, alpha=0.75)

plt.grid(False)

Confusion Matrix

Dalam bidang machine learning dan khususnya masalah klasifikasi statistik , Confusion Matrix , yang juga dikenal sebagai matriks kesalahan, [4] adalah tata letak tabel spesifik yang memungkinkan visualisasi kinerja suatu algoritma, biasanya supervised learning (dalam belajar tanpa pengawasan biasanya disebut matriks contingency). Setiap baris matriks mewakili nilai dalam kelas yang diprediksi sementara setiap kolom mewakili nilai dalam kelas sebenarnya (atau sebaliknya). [2] Nama ini berasal dari fakta bahwa membuatnya mudah untuk melihat apakah sistem membingungkan dua kelas (yaitu umumnya salah memberi label satu sama lain).

Ini adalah jenis khusus dari tabel kontingensi , dengan dua dimensi ("aktual" dan "diperkirakan"), dan set "kelas" yang identik di kedua dimensi (setiap kombinasi dimensi dan kelas adalah variabel dalam tabel kontingensi).

In [25]:
from sklearn.metrics import confusion_matrix
In [26]:
confusion_matrix(Y, y_kmeans)
Out[26]:
array([[  2, 355],
       [122,  90]], dtype=int64)
In [27]:
conf=confusion_matrix(Y, y_kmeans)
plt.figure(figsize=(6,6))
sb.set(font_scale=1.5)
sb.heatmap(conf.T, square=True, annot=True, fmt='.3g', cmap='viridis', linewidths=1)
plt.xlabel('Predicted Value')
plt.ylabel('True Value')
Out[27]:
Text(25.5, 0.5, 'True Value')
In [28]:
from sklearn.metrics import accuracy_score
accuracy_score(Y, y_kmeans)
Out[28]:
0.1616871704745167

Adjusted Mutual Information

Metrik ini merupakan pengukuran simetris: perbandingan label_true dengan label_pred akan menghasilkan nilai skor yang sama. Ini bisa bermanfaat untuk mengukur kesesuaian dua label independen pada dataset yang sama ketika label yang sebenarnya tidak diketahui.

In [29]:
from sklearn.metrics import adjusted_mutual_info_score
print(adjusted_mutual_info_score(Y, y_kmeans, average_method='arithmetic'))
print("Skore mendekati nilai 1 untuk klaster yang identik.")
0.4187694700573139
Skore mendekati nilai 1 untuk klaster yang identik.

Rand index adjusted

In [30]:
from sklearn.metrics import adjusted_rand_score
print(adjusted_rand_score(Y, y_kmeans))
print("Skore mendekati nilai 1 untuk klaster yang identik.")
0.4457449374936547
Skore mendekati nilai 1 untuk klaster yang identik.

Calinski and Harabaz score

In [31]:
from sklearn.metrics import calinski_harabaz_score
print(calinski_harabaz_score(X, y_kmeans))
print("Skore menunjukkan rasio dispersi dalam klaster terhadap dispersi antar klaster.")
1317.9848900002903
Skore menunjukkan rasio dispersi dalam klaster terhadap dispersi antar klaster.
c:\program files\python37\lib\site-packages\sklearn\utils\deprecation.py:85: DeprecationWarning: Function calinski_harabaz_score is deprecated; Function 'calinski_harabaz_score' has been renamed to 'calinski_harabasz_score' and will be removed in version 0.23.
  warnings.warn(msg, category=DeprecationWarning)

Davies-Bouldin score

In [32]:
from sklearn.metrics import davies_bouldin_score
print(davies_bouldin_score(X, y_kmeans))
print("Skore menunjukkan rasio jarak dalam klaster terhadap jarak antar klaster.")
0.46601783424826154
Skore menunjukkan rasio jarak dalam klaster terhadap jarak antar klaster.

Completeness Score

In [33]:
from sklearn.metrics import completeness_score
print(completeness_score(Y, y_kmeans))
print("*Completeness* menunjukkan apakah semua titik data untuk kelompok yang sama merupakan anggota klaster yang sama.")
0.4740826042580835
*Completeness* menunjukkan apakah semua titik data untuk kelompok yang sama merupakan anggota klaster yang sama.

Contingency Matrix

In [34]:
from sklearn.metrics.cluster import contingency_matrix
print(contingency_matrix(Y, y_kmeans,eps=None, sparse=False))
[[  2 355]
 [122  90]]

Matriks antara nilai sebenarnya dengan nilai prediksi. Matrix ini serupa dengan Confusion Matrix

Fowlkes Mallows Score

In [35]:
from sklearn.metrics import fowlkes_mallows_score
print(fowlkes_mallows_score(Y, y_kmeans))
0.7762511790232877

Skore bernilai antara 0 sampai dengan 1. Semakin tinggi nilai semakin bagus tingkat kesamaan antara nilai sebenarnya dengan nilai prediksi.

Homogeneity and Completeness

In [36]:
from sklearn.metrics import homogeneity_completeness_v_measure
homogeneity_completeness_v_measure(Y, y_kmeans)
Out[36]:
(0.3764068439046041, 0.4740826042580835, 0.4196358631006222)

Mempunyai nilai antara 0.0 sampai dengan 1.0. Nilai yang baik adalah nilai yang mendekati 1.0

Homogeneity Score

In [37]:
from sklearn.metrics import homogeneity_score
homogeneity_score(Y, y_kmeans)
Out[37]:
0.3764068439046041

Skor antara 0.0 sampai dengan 1.0. Skor 1.0 menunjukkan labelisasi homogen

Mutual Info Score

In [38]:
from sklearn.metrics import mutual_info_score
mutual_info_score(Y, y_kmeans, contingency=None)
Out[38]:
0.24854759297918613

Nilai yang didasarkan pada perhitungan contingency matrix

Normalized Mutual Info Score

In [39]:
from sklearn.metrics import normalized_mutual_info_score
normalized_mutual_info_score(Y, y_kmeans, average_method='arithmetic')
Out[39]:
0.4196358631006222

Skor antara 0.0 sampai dengan 1.0. Skor 1.0 menunjukkan labelisasi total

Silhouette Score

In [40]:
from sklearn.metrics import silhouette_score
print(silhouette_score(X, y_kmeans))
0.6991355163262034

Nilai paling bagus adalah 1 dan nilai paling jelek adalah -1. Nilai mendekati 0 menunjukkan klaster yang tumpang tindih. Nilai negatif menunjukkan bahwa sampel dikelompokkan ke dalam klaster yang salah

Silhouette Samples

In [41]:
from sklearn.metrics import silhouette_samples
print(silhouette_samples(X, y_kmeans))
[0.50724715 0.69126013 0.70217877 0.81760347 0.69927465 0.83224498
 0.57478115 0.77741984 0.81918077 0.83190776 0.27483364 0.33878342
 0.66550932 0.33235796 0.77629557 0.66429736 0.61493049 0.26944493
 0.70537577 0.78824154 0.81937111 0.75254148 0.56785975 0.66254213
 0.22733166 0.26009557 0.68875716 0.64122726 0.49466239 0.39819215
 0.63534641 0.83291996 0.20616282 0.68877425 0.23523932 0.06666644
 0.70767389 0.81770262 0.58231824 0.79424399 0.79123651 0.81058579
 0.65037939 0.80468598 0.81328664 0.62254368 0.70326932 0.81158688
 0.83345446 0.79280065 0.83087889 0.78352312 0.83256098 0.56415485
 0.548308   0.82638432 0.68409592 0.66859559 0.81589311 0.71869756
 0.77710306 0.71695169 0.68744976 0.74380775 0.82720409 0.64708168
 0.74964373 0.82111928 0.73683307 0.82655672 0.67065254 0.73240165
 0.32046603 0.77104477 0.83316994 0.19023392 0.79359507 0.51775859
 0.70502841 0.82532865 0.82386341 0.81928824 0.49232363 0.6720687
 0.83310338 0.62130792 0.68369622 0.62240113 0.83343744 0.67714689
 0.65804608 0.50701134 0.80007578 0.79764765 0.56567241 0.7051443
 0.83369502 0.76623732 0.82711232 0.69302701 0.7722777  0.66502809
 0.8337646  0.76873321 0.7916098  0.813865   0.82744082 0.83358907
 0.62046463 0.82197128 0.76357329 0.83174383 0.71159308 0.79054889
 0.72328044 0.83256299 0.73323867 0.61855915 0.33226948 0.46714527
 0.82396718 0.62348913 0.53009015 0.6952231  0.79882589 0.76633242
 0.78229645 0.67587118 0.63471465 0.69944293 0.83352492 0.44658207
 0.22430504 0.40576758 0.62124721 0.82510302 0.83016227 0.8232731
 0.62804122 0.81702523 0.76215416 0.21085631 0.82270215 0.82303119
 0.80218346 0.8317383  0.83169882 0.60361793 0.69674879 0.77039721
 0.81980672 0.7047113  0.76986628 0.81560077 0.808868   0.83386094
 0.42225445 0.11894131 0.83319148 0.80814456 0.82928253 0.68633211
 0.70396824 0.83348139 0.55623102 0.60238979 0.8029832  0.14779343
 0.47338771 0.61173617 0.83329209 0.78930395 0.48174494 0.81134757
 0.79903639 0.72062919 0.77132023 0.11692261 0.81614552 0.8240762
 0.39770231 0.69557989 0.38973732 0.82404089 0.55353477 0.7804453
 0.57608762 0.82943984 0.83125094 0.83369645 0.73975804 0.82482484
 0.7621055  0.83141044 0.64050136 0.82126792 0.76575546 0.54933961
 0.68215709 0.69269361 0.83381956 0.38890713 0.55642203 0.75527437
 0.83162239 0.53834183 0.76688024 0.22599421 0.81425007 0.51457848
 0.70123333 0.83108577 0.35123089 0.37834804 0.73887654 0.77636444
 0.83183856 0.78280764 0.70547922 0.70408636 0.78577703 0.79229013
 0.77793255 0.40705883 0.80402674 0.69501046 0.78777675 0.61446824
 0.8279423  0.82594288 0.18783568 0.82085079 0.81572724 0.69348739
 0.7564662  0.74882447 0.56155995 0.69747966 0.72029741 0.2863173
 0.7801669  0.83237214 0.81926281 0.76456103 0.68576742 0.79246003
 0.80729348 0.82277031 0.79734314 0.82547164 0.67772333 0.82590137
 0.70274409 0.3156518  0.69176249 0.74994328 0.70250347 0.54585031
 0.36348589 0.45681015 0.70139692 0.33194234 0.37791832 0.41641334
 0.31619753 0.65623146 0.79743983 0.79282587 0.82308661 0.79658785
 0.70862175 0.81836472 0.62790437 0.76328222 0.50345483 0.83231566
 0.82191559 0.64836027 0.78315251 0.76759842 0.67595033 0.83068876
 0.68031593 0.24347561 0.82109133 0.83019434 0.83288693 0.82116548
 0.82115458 0.82188492 0.67879946 0.60860097 0.82243768 0.83189754
 0.82920591 0.77245839 0.80652148 0.83162918 0.70785603 0.79031404
 0.70435285 0.83310057 0.70594565 0.79055794 0.82452681 0.82816787
 0.8099467  0.7337772  0.78819038 0.81371466 0.82903242 0.65428755
 0.82575897 0.82578843 0.71653882 0.83165679 0.83358636 0.55443886
 0.73282916 0.83236218 0.7846483  0.70372015 0.82550794 0.70507263
 0.83375134 0.82998599 0.73128577 0.83337905 0.20717833 0.14695988
 0.2922904  0.82227933 0.81827087 0.81931857 0.83370546 0.28177022
 0.82197384 0.63940008 0.77648715 0.53503892 0.69508592 0.75717917
 0.81200462 0.70003908 0.82936638 0.78304576 0.83334266 0.64677515
 0.82433034 0.83071515 0.82955027 0.41467259 0.45435258 0.53816738
 0.81693152 0.83083896 0.82307595 0.76060921 0.73022915 0.75579426
 0.82950881 0.80412446 0.82830182 0.09192581 0.79969957 0.7006411
 0.70558509 0.8338719  0.60595009 0.63147125 0.07918905 0.55053853
 0.66931267 0.68816663 0.77644352 0.31019395 0.79291493 0.79096005
 0.77482934 0.80577753 0.81764749 0.81138601 0.83325568 0.83373698
 0.80680367 0.65447119 0.83360219 0.75721351 0.82027039 0.69370575
 0.78286024 0.72555845 0.4591587  0.66120164 0.83342209 0.74155993
 0.795206   0.82462673 0.81398969 0.83175945 0.49442942 0.83245269
 0.8169401  0.82482189 0.8332345  0.81009919 0.2657171  0.82201588
 0.48938892 0.83362771 0.82332534 0.81171439 0.74919201 0.59408694
 0.53024517 0.83196016 0.75078565 0.25342959 0.82826485 0.81497725
 0.82661751 0.66929778 0.82614208 0.78010667 0.76321332 0.77418257
 0.7901059  0.8046394  0.81542815 0.82695813 0.61228636 0.83341386
 0.70583198 0.65543749 0.63715985 0.75357211 0.82427997 0.73873079
 0.76193082 0.74485864 0.81090526 0.3180263  0.76932471 0.79427068
 0.48547618 0.83245553 0.46623063 0.63486743 0.66382964 0.67030273
 0.83165194 0.69908987 0.83193227 0.69011411 0.82927606 0.79426745
 0.82673523 0.80910367 0.81891504 0.7633138  0.32451475 0.35089988
 0.68671277 0.82746506 0.81004668 0.80627963 0.81014652 0.76096258
 0.46438285 0.82635213 0.7628074  0.83245872 0.60939685 0.83194433
 0.80426222 0.82505024 0.7287776  0.75384194 0.8250012  0.19696588
 0.83383195 0.7495954  0.80370224 0.78418607 0.45115979 0.83231713
 0.65214924 0.69101812 0.82946654 0.00230272 0.83333819 0.48883549
 0.51967556 0.83201162 0.80912729 0.62235555 0.83084705 0.83194451
 0.6127576  0.69334521 0.60362081 0.75731501 0.83247267 0.55758904
 0.73566484 0.75183401 0.83369984 0.80834773 0.18057127 0.49751667
 0.83056488 0.62280009 0.79619396 0.66511265 0.57512944 0.81999826
 0.59187668 0.70409437 0.82904756 0.82899355 0.7417722  0.50395248
 0.81858448 0.78420141 0.76547107 0.71657524 0.80055841 0.83297275
 0.75957351 0.83306355 0.83005729 0.82838667 0.78000585 0.69929093
 0.80787082 0.69691662 0.7123263  0.82511133 0.6876503  0.68225115
 0.82432905 0.66911814 0.64672578 0.80821729 0.77041039 0.78197525
 0.78499244 0.78261021 0.76055523 0.80535059 0.80497035 0.81403242
 0.8232004  0.74588446 0.82079118 0.78233099 0.7770375  0.75039555
 0.66803823 0.82424999 0.75163385 0.81641222 0.53553299 0.68371736
 0.63271108 0.70509957 0.00559708 0.70429089 0.68909834]

Nilai paling bagus adalah 1 dan nilai paling jelek adalah -1. Nilai mendekati 0 menunjukkan klaster yang tumpang tindih.

v_measure Score

In [42]:
from sklearn.metrics import v_measure_score
print(v_measure_score(Y, y_kmeans))
0.4196358631006222

Skor antara 0.0 sampai dengan 1.0. Skor 1.0 menunjukkan labelisasi total

In [43]:
from sklearn.cluster import k_means
k_means(X, n_clusters=3, sample_weight=None, init='k-means++', precompute_distances='auto', n_init=10, max_iter=300, verbose=False, tol=0.0001, random_state=None, copy_x=True, n_jobs=None, algorithm='auto', return_n_iter=True)
Out[43]:
(array([[1.18186401e+01, 1.82645428e+01, 7.60350147e+01, 4.35482596e+02,
         9.46703835e-02, 8.41574926e-02, 5.03849578e-02, 2.69867375e-02,
         1.77174336e-01, 6.40443068e-02],
        [2.06604819e+01, 2.21549398e+01, 1.36998795e+02, 1.33857831e+03,
         1.01569518e-01, 1.54592771e-01, 1.96433976e-01, 1.11134096e-01,
         1.91921687e-01, 6.01077108e-02],
        [1.57625170e+01, 2.00358503e+01, 1.03289864e+02, 7.74838776e+02,
         9.73161224e-02, 1.22513129e-01, 1.16614218e-01, 6.43697959e-02,
         1.84282313e-01, 6.14413605e-02]]),
 array([2, 1, 1, 0, 1, 0, 2, 0, 0, 0, 2, 2, 1, 2, 0, 2, 2, 2, 1, 0, 0, 0,
        2, 1, 2, 2, 2, 1, 2, 2, 1, 0, 2, 1, 2, 2, 2, 0, 2, 0, 0, 0, 1, 0,
        0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 1, 2, 0, 0, 0, 0, 2, 0, 0, 2,
        0, 0, 0, 0, 1, 0, 2, 0, 0, 2, 0, 2, 1, 0, 0, 0, 1, 1, 0, 1, 2, 1,
        0, 2, 2, 2, 0, 0, 2, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
        0, 0, 2, 0, 0, 0, 0, 2, 2, 2, 0, 1, 1, 2, 0, 0, 0, 1, 2, 1, 0, 2,
        2, 2, 1, 0, 0, 0, 2, 0, 0, 2, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0,
        0, 0, 2, 2, 0, 0, 0, 1, 1, 0, 1, 2, 0, 2, 2, 2, 0, 0, 2, 0, 0, 0,
        0, 2, 0, 0, 1, 1, 2, 0, 2, 0, 2, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 2,
        1, 2, 0, 2, 1, 0, 0, 2, 0, 2, 0, 2, 1, 0, 1, 2, 2, 0, 0, 0, 1, 1,
        0, 0, 0, 2, 0, 2, 0, 2, 0, 0, 2, 0, 0, 1, 0, 0, 1, 1, 2, 2, 0, 0,
        0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 2, 1, 0, 1, 2, 2, 2, 1, 2, 2, 2,
        2, 1, 0, 0, 0, 0, 2, 0, 1, 0, 2, 0, 0, 1, 0, 0, 1, 0, 1, 2, 0, 0,
        0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 2, 0, 1, 0, 1, 0, 0, 0, 0, 0,
        0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 1, 0, 1, 0, 0, 2, 0, 2, 2,
        2, 0, 0, 0, 0, 2, 0, 1, 0, 1, 2, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 2,
        1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 1, 0, 1, 1, 2, 2, 1, 1,
        0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 2, 1, 0, 2,
        0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 2, 2, 0, 0, 2,
        0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 1, 2, 0, 0, 2, 0, 2,
        0, 2, 0, 0, 2, 0, 2, 2, 2, 1, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 2, 1,
        2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 2, 0, 0, 0, 0,
        2, 0, 2, 1, 0, 2, 0, 2, 2, 0, 0, 2, 0, 0, 1, 1, 2, 0, 0, 1, 0, 0,
        0, 0, 2, 2, 0, 2, 0, 2, 2, 0, 2, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
        0, 0, 0, 0, 0, 1, 0, 1, 2, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0,
        0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 1, 1, 1, 2, 1, 0]),
 13185019.078159723,
 6)

Principal component analysis ( PCA ) adalah prosedur statistik yang menggunakan transformasi ortogonal untuk mengubah seperangkat pengamatan dari variabel yang mungkin berkorelasi (entitas yang masing-masing mengambil berbagai nilai numerik) menjadi seperangkat nilai variabel tidak linear yang disebut komponen utama . Transformasi ini didefinisikan sedemikian rupa sehingga komponen utama pertama memiliki varians sebesar mungkin (yaitu, menyumbang sebanyak variabilitas dalam data mungkin), dan setiap komponen berikutnya pada gilirannya memiliki varians tertinggi yang mungkin di bawah kendala bahwa itu ortogonalke komponen sebelumnya. Vektor yang dihasilkan (masing-masing merupakan kombinasi linear dari variabel dan berisi n pengamatan) adalah himpunan basis ortogonal yang tidak berkorelasi . PCA sensitif terhadap skala relatif dari variabel asli.

PCA ditemukan pada tahun 1901 oleh Karl Pearson , [1] sebagai analog dari teorema sumbu utama dalam mekanika; kemudian dikembangkan secara independen dan dinamai oleh Harold Hotelling pada 1930-an. [2] Bergantung pada bidang aplikasi, ia juga dinamai diskrit Karhunen-Loève (KLT) dalam pemrosesan sinyal , transformasi Hotelling dalam kontrol kualitas multivariat, dekomposisi ortogonal yang tepat (POD) dalam teknik mesin, dekomposisi nilai singular (SVD) ) dari X (Golub dan Van Loan, 1983), dekomposisi nilai eigen (EVD) dari XT X dalam aljabar linier, analisis faktor (untuk diskusi tentang perbedaan antara PCA dan analisis faktor, lihat Bab 7 dari Analisis Komponen Utama Jolliffe ), [3] Eckart-Young theorem (Harman, 1960), atau fungsi ortogonal empiris (EOF ) dalam ilmu meteorologi, dekomposisi fungsi eigen empiris (Sirovich, 1987), analisis komponen empiris (Lorenz, 1956), mode quasiharmonic (Brooks et al., 1988), dekomposisi spektral dalam kebisingan dan getaran, dan analisis modal empiris dalam dinamika struktural.

PCA sebagian besar digunakan sebagai alat dalam analisis data eksplorasi dan untuk membuat model prediksi . Ini sering digunakan untuk memvisualisasikan jarak genetik dan keterkaitan antar populasi. PCA dapat dilakukan dengan dekomposisi nilai eigen dari matriks kovarians data (atau korelasi ) atau dekomposisi nilai singular dari matriks data , biasanya setelah langkah normalisasi data awal. Normalisasi setiap atribut terdiri dari pemusatan rata - rata - mengurangkan setiap nilai data dari rata-rata variabel yang diukur sehingga rata-rata empirisnya (rata-rata) adalah nol - dan, mungkin, menormalkan varian masing-masing variabel agar sama dengan 1; LihatSkor-Z . [4] Hasil PCA biasanya dibahas dalam hal skor komponen , kadang-kadang disebut skor faktor (nilai variabel yang ditransformasikan sesuai dengan titik data tertentu), dan pembebanan (bobot di mana setiap variabel asli standar harus dikalikan untuk mendapatkan skor komponen). [5]Jika skor komponen distandarisasi untuk varians unit, memuat harus berisi varians data di dalamnya (dan itu adalah besarnya nilai eigen). Jika skor komponen tidak distandarisasi (karena itu mengandung varians data) maka pemuatan harus berskala-unit, ("dinormalisasi") dan bobot ini disebut vektor eigen; mereka adalah cosinus dari rotasi orthogonal variabel menjadi komponen utama atau belakang.

PCA adalah analisis multivariat berbasis vektor eigen yang paling sederhana . Seringkali, operasinya dapat dianggap sebagai mengungkapkan struktur internal data dengan cara yang paling menjelaskan perbedaan dalam data. Jika dataset multivariat divisualisasikan sebagai seperangkat koordinat dalam ruang data dimensi tinggi (1 sumbu per variabel), PCA dapat menyediakan gambar dimensi yang lebih rendah kepada pengguna, proyeksi objek ini jika dilihat dari sudut pandang paling informatif [ rujukan? ] . Ini dilakukan dengan hanya menggunakan beberapa komponen utama pertama sehingga dimensi data yang diubah berkurang.

PCA terkait erat dengan analisis faktor . Analisis faktor biasanya memasukkan lebih banyak asumsi spesifik domain tentang struktur yang mendasarinya dan memecahkan vektor eigen dari matriks yang sedikit berbeda.

PCA juga terkait dengan analisis korelasi kanonik (CCA) . CCA mendefinisikan sistem koordinat yang secara optimal menggambarkan cross-covariance antara dua dataset sementara PCA mendefinisikan sistem koordinat orthogonal baru yang secara optimal menggambarkan varians dalam satu dataset. [6] [7]

In [44]:
from sklearn.decomposition import PCA
In [46]:
import pandas as pd
df=pd.read_csv('iris.csv')

Data iris flower akan digunakan untuk pengolahan data menggunakan PCA (Sumber: Wikipedia)

The Iris Data bunga ditetapkan atau Fisher Iris kumpulan data adalah multivariat kumpulan data diperkenalkan oleh British statistik dan biologi Ronald Fisher pada tahun 1936 makalahnya Penggunaan beberapa pengukuran di masalah taksonomi sebagai contoh analisis diskriminan linier . [1] Kadang-kadang disebut set data Iris Anderson karena Edgar Anderson mengumpulkan data untuk menghitung variasi morfologis bunga Iris dari tiga spesies terkait.[2] Dua dari tiga spesies dikumpulkan di Semenanjung Gaspé "semuanya berasal dari padang rumput yang sama, dan dipetik pada hari yang sama dan diukur pada saat yang sama oleh orang yang sama dengan peralatan yang sama". [3]

Set data terdiri dari 50 sampel dari masing-masing dari tiga spesies Iris ( Iris setosa , Iris virginica dan Iris versicolor ). Empat fitur diukur dari masing-masing sampel: panjang dan lebar sepal dan kelopak , dalam sentimeter. Berdasarkan kombinasi keempat fitur ini, Fisher mengembangkan model diskriminan linier untuk membedakan spesies dari satu sama lain.

image.png

Iris setosa (juga dikenal sebagai iris bulu-runcing ), adalah spesies dalam genus Iris , juga dalam subgenus Limniris dan dalam seri Iris Tripetalae . Ini adalah tanaman rhizomatosa abadi dari berbagai wilayah di laut Arktik, termasuk Alaska , Maine , Kanada (termasuk British Columbia , Newfoundland , Quebec dan Yukon ), Rusia (termasuk Siberia ), Asia timur laut, Cina , Koreadan ke selatan ke Jepang. Tanaman ini memiliki batang bercabang tinggi, daun hijau tengah dan ungu, ungu-biru, ungu-biru, biru, hingga bunga lavender. Ada juga tanaman dengan bunga merah muda dan putih.

image.png

Iris versicolor juga dikenal sebagai bendera biru , blueflag harlequin , bendera biru yang lebih besar , bendera biru utara , [1] dan bendera racun , ditambah variasi lain dari nama-nama ini, [2] [3] dan di Inggris dan Irlandia sebagai iris ungu . [4]

Ini adalah spesies Iris asli Amerika Utara, di Amerika Serikat bagian Timur dan Kanada Timur . Hal ini biasa terjadi di padang rumput, rawa-rawa, dan sepanjang streambanks dan pantai. Versitet julukan spesifik berarti "berbagai warna". [5]

Ini adalah salah satu dari tiga spesies Iris dalam data bunga Iris yang ditetapkan oleh Ronald Fisher dalam makalahnya tahun 1936 "Penggunaan berbagai pengukuran dalam masalah taksonomi" sebagai contoh analisis diskriminan linier .

image.png

Iris virginica , dengan nama umum Virginia iris , adalah abadi spesies dari tanaman berbunga , asli Amerika Utara bagian timur.

Hal ini biasa terjadi di sepanjang dataran pantai dari Florida ke Georgia di Amerika Serikat Tenggara . [2]

Ini adalah salah satu dari tiga spesies Iris dalam data bunga Iris yang ditetapkan oleh Ronald Fisher dalam makalahnya tahun 1936 "Penggunaan berbagai pengukuran dalam masalah taksonomi" sebagai contoh analisis diskriminan linier .

In [47]:
df=df.drop('Unnamed: 0', axis=1)
df.head()
Out[47]:
sepal_length sepal_width petal_length petal_width class
0 5.1 3.5 1.4 0.2 Iris-setosa
1 4.9 3.0 1.4 0.2 Iris-setosa
2 4.7 3.2 1.3 0.2 Iris-setosa
3 4.6 3.1 1.5 0.2 Iris-setosa
4 5.0 3.6 1.4 0.2 Iris-setosa
In [48]:
X=df.iloc[:,0:4]
X.head()
Out[48]:
sepal_length sepal_width petal_length petal_width
0 5.1 3.5 1.4 0.2
1 4.9 3.0 1.4 0.2
2 4.7 3.2 1.3 0.2
3 4.6 3.1 1.5 0.2
4 5.0 3.6 1.4 0.2
In [49]:
Y=df['class']
Y.head()
Out[49]:
0    Iris-setosa
1    Iris-setosa
2    Iris-setosa
3    Iris-setosa
4    Iris-setosa
Name: class, dtype: object
In [50]:
from sklearn.preprocessing import LabelEncoder
lbe=LabelEncoder()
Y=lbe.fit_transform(Y)
Y
Out[50]:
array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
       2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
       2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2])
In [51]:
pca=PCA(n_components=3)
In [52]:
x_pca=pca.fit_transform(X)
In [53]:
import numpy as np
covmat=np.cov(x_pca.T)
In [54]:
print(covmat)
[[ 4.22484077e+00 -1.19218580e-16  7.15311479e-17]
 [-1.19218580e-16  2.42243572e-01 -4.91776642e-17]
 [ 7.15311479e-17 -4.91776642e-17  7.85239081e-02]]
In [55]:
eigenval, eigenvec=np.linalg.eig(covmat)
In [56]:
print(eigenval)
[4.22484077 0.24224357 0.07852391]
In [57]:
print(eigenvec)
[[ 1.00000000e+00 -2.99348827e-17 -1.72517322e-17]
 [ 0.00000000e+00 -1.00000000e+00  2.77555756e-16]
 [ 0.00000000e+00  3.33066907e-16  1.00000000e+00]]
In [58]:
eig_pairs=[(np.abs(eigenval[i]),eigenvec[:,i]) for i in range(len(eigenval))]
tot=sum(eigenval)
In [59]:
var_exp=[(i/tot)*100 for i in sorted(eigenval, reverse=True)]
var_exp
Out[59]:
[92.94335406356555, 5.329178371934544, 1.7274675644999145]
In [60]:
cum_var_exp = np.cumsum(var_exp)
print(cum_var_exp)
[ 92.94335406  98.27253244 100.        ]
In [61]:
import numpy as np
import matplotlib.pyplot as plt

plt.figure(figsize=(9,6))
plt.bar(range(3),var_exp,alpha=0.5, align='center',label='Individual Explained Variance')
plt.step(range(3),cum_var_exp, 'r-', alpha=0.5, where='mid',label='Cumulative Explained Variance')
plt.ylabel('Explained Variance Ratio')
plt.xlabel('Principal Component')
plt.legend(loc='best')
Out[61]:
<matplotlib.legend.Legend at 0x104f7fd0e10>

Komponen utama pertama, atau PC1, 'menjelaskan varian paling banyak' dalam dataset asli - ini juga berarti bahwa fitur yang berkorelasi dengan PC1 berkontribusi terhadap sejumlah besar variasi dalam data.

Saat Anda beralih dari PC1 ke PC final, jumlah varians yang dijelaskan berkurang, sedangkan varians yang dijelaskan kumulatif mendekati 100%. Jika Anda ingin mengurangi jumlah dimensi untuk analisis, Anda dapat memilih jumlah PC tertentu berdasarkan pada seberapa banyak variasi dijelaskan (mis. 95%). Anda juga dapat memahami seberapa banyak perbedaan dijelaskan hanya dalam dua atau tiga dimensi yang mudah divisualisasikan.

Saat menganalisis data dengan banyak variabel, saya ingin memahami berapa banyak dan fitur mana yang berguna. Saya bekerja di genomik, di mana Anda dapat dengan mudah memiliki ribuan fitur per instance dan memahami berapa banyak fitur yang saya butuhkan membuatnya lebih mudah untuk melatih dan menafsirkan model pada data itu. Dalam genomik, fitur itu murah dan instansinya berharga. Untuk alasan ini, saya sering menggunakan PCA sebagai panduan untuk memilih fitur mana yang menjadi fokus.

In [62]:
from mpl_toolkits.mplot3d import Axes3D

fig=plt.figure(1,figsize=(9,6))
ax=Axes3D(fig,elev=-150,azim=110)
colormap=np.array(['red','blue','purple'])
ax.scatter(x_pca[:, 0], x_pca[:, 1],edgecolor='k', s=100,c=colormap[Y])
ax.set_title("First three PCA directions")
ax.set_xlabel("1st eigenvector")
ax.w_xaxis.set_ticklabels([])
ax.set_ylabel("2nd eigenvector")
ax.w_yaxis.set_ticklabels([])
ax.set_zlabel("3rd eigenvector")
ax.w_zaxis.set_ticklabels([])
plt.show()
In [63]:
plt.figure(figsize=(9,6))
plt.scatter(x_pca[:, 0], x_pca[:, 1],edgecolor='k', s=100,c=colormap[Y])
Out[63]:
<matplotlib.collections.PathCollection at 0x104f80b3390>

dari Wikipedia, ensiklopedia gratis

Dalam statistik dan penggalian data , Affinity Propagation (AP) adalah algoritma pengelompokan berdasarkan konsep "message passing" antara titik data. [1] Tidak seperti algoritma pengelompokan seperti k-means atau k-medoids, propagasi afinitas tidak memerlukan jumlah cluster yang harus ditentukan atau diperkirakan sebelum menjalankan algoritma. Mirip dengan k -medoid, propagasi afinitas menemukan "contoh" anggota kumpulan input yang mewakili cluster. [1]

Algoritma

Misalnya xi sampai dengan xn merupakan satu set titik data, tanpa asumsi tentang struktur internal mereka, dan membiarkan s menjadi fungsi yang mengkuantifikasi kesamaan antara dua titik, sehingga s ( xi , xj )> s ( xi , xk ) bila xi lebih mirip dengan xj daripada dengan xk. Maka, jarak kuadrat negatif dari dua titik data untuk titik xi dan xk.

$${\displaystyle s(i,k)=-\left\|x_{i}-x_{k}\right\|^{2}} {\displaystyle s(i,k)=-\left\|x_{i}-x_{k}\right\|^{2}}$$

Aplikasi Penemu propagasi afinitas menunjukkan bahwa AP lebih baik daripada k-means untuk aplikasi komputer vision dan komputasi biologi, misalnya mengelompokkan gambar wajah manusia dan mengidentifikasi transkrip yang diatur[1]. Sebuah studi yang membandingkan propagasi afinitas dan pengelompokan Markov pada partisi grafik interaksi protein menemukan bahwa pengelompokan Markov bekerja lebih baik untuk masalah itu. [3] Varian semi-diawasi telah diusulkan untuk aplikasi teks mining [4].

In [64]:
from sklearn.cluster import AffinityPropagation
In [65]:
import pandas as pd
In [66]:
from sklearn.datasets import load_breast_cancer

Wisconsin Breast Cancer Diagnostic Datasets

Dataset yang digunakan adalah Wisconsin Breast Cancer Diagnostic. Diagnosis dan deteksi dini kanker payudara dengan mendiagnosis massa payudara dari Aspirasi Jarum Halus (FNA) telah dibuat yang memungkinkan diagnosis FNA payudara bahkan oleh pengguna yang tidak terlatih. Sistem ini digunakan di Rumah Sakit University of Wisconsin. Antarmuka grafis dikembangkan untuk menghitung fitur wilayah kecil dari FNA didigitalkan, menghasilkan 640 × 400, 8-bit-per-pixel gambar grayscale. Program analisis gambar, program Xcyt digunakan untuk fitting kurva untuk menentukan batas-batas inti. Sebagian dari gambar yang diproses ditunjukkan pada Gambar 1. Sepuluh fitur dihitung untuk masing-masing inti: luas, jari-jari, keliling, simetri, jumlah dan ukuran cekung, dimensi fraktal (batas), kekompakan, kehalusan dan tekstur. Data diagnosis berisi simbol B dan M yang mewakili Benign/Sehat dan Malignant/Sakit.

Sebagian besar jenis kanker payudara mudah didiagnosis dengan analisis mikroskopis sampel — atau biopsi — pada area payudara yang terkena. Juga, ada beberapa jenis kanker payudara yang memerlukan ujian laboratorium khusus.

Dua metode skrining yang paling umum digunakan, pemeriksaan fisik payudara oleh penyedia layanan kesehatan dan mamografi, dapat menawarkan kemungkinan perkiraan bahwa benjolan adalah kanker, dan juga dapat mendeteksi beberapa lesi lain, seperti kista sederhana . [89] Ketika pemeriksaan ini tidak dapat disimpulkan, penyedia layanan kesehatan dapat mengeluarkan sampel cairan dalam benjolan untuk analisis mikroskopis (prosedur yang dikenal sebagai aspirasi jarum halus)., atau aspirasi jarum halus dan sitologi — FNAC) untuk membantu menegakkan diagnosis. Aspirasi jarum dapat dilakukan di kantor atau klinik penyedia layanan kesehatan. Anestesi lokal dapat digunakan untuk mematikan jaringan payudara untuk mencegah rasa sakit selama prosedur, tetapi mungkin tidak diperlukan jika benjolan tidak berada di bawah kulit. Temuan cairan bening membuat benjolan tersebut sangat tidak mungkin menjadi kanker, tetapi cairan berdarah dapat dikirim untuk diperiksa di bawah mikroskop untuk sel-sel kanker. Bersama-sama, pemeriksaan fisik payudara, mamografi, dan FNAC dapat digunakan untuk mendiagnosis kanker payudara dengan tingkat akurasi yang baik.

Pilihan lain untuk biopsi termasuk biopsi inti atau biopsi payudara berbantuan vakum , [90] yang merupakan prosedur di mana sebagian benjolan payudara diangkat; atau biopsi eksisi , di mana seluruh benjolan dihilangkan. Sangat sering hasil pemeriksaan fisik oleh penyedia layanan kesehatan, mamografi, dan tes tambahan yang dapat dilakukan dalam keadaan khusus (seperti pencitraan dengan USG atau MRI ) cukup untuk menjamin biopsi eksisi sebagai diagnostik definitif dan metode perawatan primer.

In [67]:
wdbc=load_breast_cancer()
In [68]:
wdbc.data
Out[68]:
array([[1.799e+01, 1.038e+01, 1.228e+02, ..., 2.654e-01, 4.601e-01,
        1.189e-01],
       [2.057e+01, 1.777e+01, 1.329e+02, ..., 1.860e-01, 2.750e-01,
        8.902e-02],
       [1.969e+01, 2.125e+01, 1.300e+02, ..., 2.430e-01, 3.613e-01,
        8.758e-02],
       ...,
       [1.660e+01, 2.808e+01, 1.083e+02, ..., 1.418e-01, 2.218e-01,
        7.820e-02],
       [2.060e+01, 2.933e+01, 1.401e+02, ..., 2.650e-01, 4.087e-01,
        1.240e-01],
       [7.760e+00, 2.454e+01, 4.792e+01, ..., 0.000e+00, 2.871e-01,
        7.039e-02]])
In [69]:
wdbc.data.shape
Out[69]:
(569, 30)
In [70]:
wdbc.target
Out[70]:
array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1,
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
       0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0,
       1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0,
       1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1,
       1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0,
       0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1,
       1, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0,
       0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0,
       1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1,
       1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0,
       0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0,
       0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0,
       1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1,
       1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1,
       1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
       1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1,
       1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1,
       1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1])
In [71]:
wdbc.target.shape
Out[71]:
(569,)
In [72]:
X=wdbc.data
In [73]:
Y=wdbc.target
In [74]:
apc=AffinityPropagation(damping=0.99, max_iter=1000, convergence_iter=5)
In [75]:
apc.fit(X)
Out[75]:
AffinityPropagation(affinity='euclidean', convergence_iter=5, copy=True,
                    damping=0.99, max_iter=1000, preference=None,
                    verbose=False)
In [76]:
y_apc=apc.predict(X)
In [77]:
import matplotlib.pyplot as plt
In [78]:
centers=apc.cluster_centers_
In [79]:
plt.figure(figsize=(9,6))
plt.scatter(X[:,1], X[:,0], c=y_apc, s=100, cmap='viridis')
plt.scatter(centers[:,1], centers[:,0], c='black', s=2500, alpha=0.75)

plt.grid(False)
In [80]:
from sklearn.metrics import confusion_matrix
In [81]:
confusion_matrix(Y, y_apc)
Out[81]:
array([[201,  11],
       [357,   0]], dtype=int64)
In [82]:
import seaborn as sb
conf=confusion_matrix(Y, y_apc)
sb.set(font_scale=1.25)
sb.heatmap(conf.T, square=True, annot=True, fmt='.3g', cmap='viridis', linewidths=1)
plt.xlabel('Predicted Value')
plt.ylabel('True Value')
Out[82]:
Text(78.90000000000006, 0.5, 'True Value')
In [83]:
from sklearn.metrics import accuracy_score
accuracy_score(Y, y_apc)
Out[83]:
0.3532513181019332

Adjusted Mutual Information

Metrik ini merupakan pengukuran simetris: perbandingan label_true dengan label_pred akan menghasilkan nilai skor yang sama. Ini bisa bermanfaat untuk mengukur kesesuaian dua label independen pada dataset yang sama ketika label yang sebenarnya tidak diketahui.

In [84]:
from sklearn.metrics import adjusted_mutual_info_score
print(adjusted_mutual_info_score(Y, y_apc, average_method='arithmetic'))
print("Skore mendekati nilai 1 untuk klaster yang identik.")
0.049012400828395905
Skore mendekati nilai 1 untuk klaster yang identik.

Rand index adjusted

In [85]:
from sklearn.metrics import adjusted_rand_score
print(adjusted_rand_score(Y, y_apc))
print("Skore mendekati nilai 1 untuk klaster yang identik.")
0.02766435305873888
Skore mendekati nilai 1 untuk klaster yang identik.

Calinski and Harabaz score

In [86]:
from sklearn.metrics import calinski_harabaz_score
print(calinski_harabaz_score(X, y_apc))
print("Skore menunjukkan rasio dispersi dalam klaster terhadap dispersi antar klaster.")
218.59530450081903
Skore menunjukkan rasio dispersi dalam klaster terhadap dispersi antar klaster.
c:\program files\python37\lib\site-packages\sklearn\utils\deprecation.py:85: DeprecationWarning: Function calinski_harabaz_score is deprecated; Function 'calinski_harabaz_score' has been renamed to 'calinski_harabasz_score' and will be removed in version 0.23.
  warnings.warn(msg, category=DeprecationWarning)

Davies-Bouldin score

In [87]:
from sklearn.metrics import davies_bouldin_score
print(davies_bouldin_score(X, y_apc))
print("Skore menunjukkan rasio jarak dalam klaster terhadap jarak antar klaster.")
0.37432120765773436
Skore menunjukkan rasio jarak dalam klaster terhadap jarak antar klaster.

Completeness Score

In [88]:
from sklearn.metrics import completeness_score
print(completeness_score(Y, y_apc))
print("*Completeness* menunjukkan apakah semua titik data untuk kelompok yang sama merupakan anggota klaster yang sama.")
0.20338679005542998
*Completeness* menunjukkan apakah semua titik data untuk kelompok yang sama merupakan anggota klaster yang sama.

Contingency Matrix

In [89]:
from sklearn.metrics.cluster import contingency_matrix
print(contingency_matrix(Y, y_apc,eps=None, sparse=False))
[[201  11]
 [357   0]]

Matriks antara nilai sebenarnya dengan nilai prediksi. Matrix ini serupa dengan Confusion Matrix

Fowlkes Mallows Score

In [90]:
from sklearn.metrics import fowlkes_mallows_score
print(fowlkes_mallows_score(Y, y_apc))
0.7242644920784216

Skore bernilai antara 0 sampai dengan 1. Semakin tinggi nilai semakin bagus tingkat kesamaan antara nilai sebenarnya dengan nilai prediksi.

Homogeneity and Completeness

In [91]:
from sklearn.metrics import homogeneity_completeness_v_measure
homogeneity_completeness_v_measure(Y, y_apc)
Out[91]:
(0.029393330723380785, 0.20338679005542998, 0.05136362301784874)

Mempunyai nilai antara 0.0 sampai dengan 1.0. Nilai yang baik adalah nilai yang mendekati 1.0

Homogeneity Score

In [92]:
from sklearn.metrics import homogeneity_score
homogeneity_score(Y, y_apc)
Out[92]:
0.029393330723380785

Skor antara 0.0 sampai dengan 1.0. Skor 1.0 menunjukkan labelisasi homogen

Mutual Info Score

In [93]:
from sklearn.metrics import mutual_info_score
mutual_info_score(Y, y_apc, contingency=None)
Out[93]:
0.019408896833950723

Nilai yang didasarkan pada perhitungan contingency matrix

Normalized Mutual Info Score

In [94]:
from sklearn.metrics import normalized_mutual_info_score
normalized_mutual_info_score(Y, y_apc, average_method='arithmetic')
Out[94]:
0.05136362301784875

Skor antara 0.0 sampai dengan 1.0. Skor 1.0 menunjukkan labelisasi total

Silhouette Score

In [95]:
from sklearn.metrics import silhouette_score
print(silhouette_score(X, y_apc))
0.7204649384370724

Nilai paling bagus adalah 1 dan nilai paling jelek adalah -1. Nilai mendekati 0 menunjukkan klaster yang tumpang tindih. Nilai negatif menunjukkan bahwa sampel dikelompokkan ke dalam klaster yang salah

Silhouette Samples

In [96]:
from sklearn.metrics import silhouette_samples
print(silhouette_samples(X, y_apc))
[ 0.09846604 -0.02611629  0.30009109  0.84262246  0.35347871  0.84128218
  0.44750564  0.81710317  0.84370848  0.84447528  0.72705655  0.67357114
  0.56445996  0.79633003  0.84608305  0.80269594  0.7451859   0.66399096
 -0.40740913  0.84621659  0.85096694  0.80021511  0.78884658 -0.59715913
 -0.05246918  0.56826561  0.81409527  0.54437457  0.69178168  0.66494478
  0.38143632  0.81249048  0.6315217   0.23030583  0.68536536  0.68567413
  0.83199982  0.84679264  0.82473332  0.84370742  0.83766363  0.83891813
  0.38808562  0.81504052  0.84373519  0.45946364  0.77709935  0.84161551
  0.84946102  0.84727132  0.84500199  0.84796706  0.84647214  0.60297328
  0.77549897  0.84283485 -0.12913831  0.79270389  0.85071052  0.78615609
  0.81414275  0.78571589  0.7993851   0.79767773  0.81733781  0.8061423
  0.80236975  0.83738261  0.79863838  0.84884795  0.19392499  0.79073514
  0.4305121   0.83340322  0.85059623  0.69711427  0.84785596  0.45163406
  0.34322649  0.85131961  0.84340935  0.85090376  0.6771596   0.57835797
  0.84883836  0.43594674  0.82923259  0.42275688  0.85010431  0.82931537
  0.82822956  0.81396242  0.83070222  0.84754531  0.7773925   0.23263354
  0.8434561   0.81170213  0.84355098  0.82744892  0.81510413  0.75855791
  0.84858321  0.81145551  0.82258629  0.83091048  0.84436716  0.84845365
 -0.50058525  0.84246104  0.8112773   0.84704659  0.84018075  0.81786009
  0.78888016  0.84867466  0.78831252  0.75922512  0.68448023  0.64508394
  0.84241076  0.46967975 -0.37780154  0.83672016  0.8493451   0.8437442
  0.82721774  0.45306609  0.83032807  0.39717216  0.84838625  0.73224996
  0.71649762  0.79287915  0.44535246  0.85036214  0.84650153  0.8371546
  0.79111555  0.83190142  0.80694205  0.69441708  0.84157073  0.85082813
  0.83013436  0.84460305  0.84807243  0.82340385  0.83501833  0.84404502
  0.85087344  0.77876476  0.81395972  0.8327132   0.84921245  0.84960073
  0.63227713  0.74286312  0.8472223   0.83482434  0.84591325  0.46847229
 -0.24972468  0.84917064 -0.58357911  0.82630468  0.82629601  0.66982503
  0.42518718  0.8259564   0.84881616  0.79362511  0.75121172  0.82483562
  0.82483828  0.78376127  0.81636853  0.76586369  0.85054985  0.8496663
  0.74920086 -0.16675523  0.6882968   0.83798486  0.79035494  0.82434193
  0.56140816  0.84498013  0.84220298  0.84877087  0.8384363   0.84912936
  0.79984934  0.837392    0.82880838  0.85083722  0.83353807  0.64343111
  0.34458716  0.77759349  0.8491162   0.66187879 -0.26649175  0.74408215
  0.8480382   0.78556301  0.80594315  0.68407753  0.8505619   0.79717468
  0.29588071  0.84702634  0.58542482  0.72648582  0.83211046  0.84203255
  0.84651487  0.82086696 -0.02917929 -0.43993595  0.84633276  0.84786894
  0.81567302  0.75222838  0.8470618   0.81905003  0.82065652  0.82435876
  0.85111834  0.84662853  0.6940539   0.83523482  0.83657776  0.07749204
  0.80464233  0.84318031  0.76531007  0.20856557  0.83690949  0.59643271
  0.84717343  0.84836954  0.83774302  0.84470948  0.51487101  0.82271777
  0.8494065   0.85073828  0.83060557  0.84122858 -0.11975409  0.84289636
  0.08045827  0.67450914  0.06108795  0.83045081  0.08523545  0.79911525
  0.69824408  0.76920654  0.12898598  0.67463525  0.63957697  0.77939103
  0.58081719  0.6904887   0.82691134  0.84873207  0.85091661  0.82473967
  0.84046607  0.83554824 -0.50839352  0.80931726  0.61621601  0.83930153
  0.83636453  0.61459093  0.84354508  0.84643928  0.31991029  0.84590468
  0.39130025  0.7601544   0.85068264  0.84989906  0.84789702  0.84963386
  0.83301289  0.83657219  0.8314476   0.82389012  0.85036142  0.84541224
  0.84900276  0.84690664  0.82333384  0.84664865  0.82938712  0.81574604
 -0.07272899  0.849129    0.2848695   0.81792902  0.84079349  0.8400301
  0.85034688  0.79119177  0.84699574  0.84942084  0.84094584  0.82278882
  0.85121325  0.83824171  0.77944762  0.84848607  0.84554554  0.52619308
  0.79319393  0.84567914  0.8192939   0.30656608  0.85107845  0.03827681
  0.84996453  0.85042563  0.83924619  0.84647747  0.7331975   0.7682261
  0.75210804  0.8510689   0.83254002  0.83978802  0.84852673  0.61783593
  0.84971495  0.20711852  0.81665638  0.77304449  0.82150277  0.80776783
  0.83193406  0.42780484  0.84453331  0.81351437  0.84884046  0.81519757
  0.83909372  0.842888    0.84622309  0.79438867  0.77504589  0.76871799
  0.83468817  0.84875111  0.85070618  0.84521956  0.79335267  0.81799559
  0.85079313  0.84975504  0.85058346  0.75862605  0.84916006  0.18882087
  0.31404053  0.84951278  0.74258286 -0.38812277  0.71403696  0.81841588
  0.33590544 -0.02125675  0.84713436  0.79707279  0.81411645  0.84789238
  0.84705787  0.83722377  0.83777207  0.83280443  0.84240743  0.85027655
  0.8499637   0.83241583  0.84739748  0.84146715  0.8349534   0.55539029
  0.81947379  0.7947548   0.65147787 -0.21467241  0.84882653  0.84369235
  0.848598    0.85071406  0.83870038  0.84787254  0.62388401  0.84892023
  0.85092631  0.85027544  0.84755752  0.83555931  0.78019619  0.85039318
  0.60550563  0.85032897  0.84285237  0.83581077  0.79702494  0.8144634
  0.79819072  0.84596118  0.80715643  0.4092246   0.84985528  0.83502326
  0.84404898  0.82773349  0.83952466  0.84591379  0.8127812   0.81492712
  0.82722494  0.83571961  0.82956046  0.85081663  0.82071811  0.84594495
  0.43974758  0.42111206  0.82949353  0.82262417  0.85123636  0.83975102
  0.841377    0.84396518  0.83615841  0.65038476  0.84523312  0.81696759
  0.6306463   0.84536575  0.56573176  0.82315573  0.82498912 -0.14013849
  0.84439728  0.49811818  0.84599283  0.83599034  0.85084662  0.84654242
  0.84459192  0.85022229  0.85096457  0.80833954  0.45049074  0.60441201
  0.83674527  0.84200605  0.84865886  0.84447082  0.84855933  0.8125938
  0.56371819  0.84439265  0.81369677  0.84837433  0.80801137  0.8488479
  0.82941839  0.85106829  0.82910133  0.84326593  0.83827258  0.77811298
  0.84860524  0.82980002  0.84946257  0.84742048  0.80681746  0.85040302
  0.82412988  0.29332279  0.84649797  0.73498743  0.85001499  0.66050244
  0.56241414  0.84762764  0.85019696  0.82776472  0.85068471  0.85088072
  0.43988594  0.19122752  0.81674861  0.83630744  0.84923317  0.73673376
  0.79432296  0.80246811  0.84579907  0.82689744  0.77950745  0.80072981
  0.84001552  0.82970577  0.82815272  0.81973192  0.79291669  0.83853932
  0.51279483  0.34582436  0.84872808  0.85112081  0.80006497  0.71081483
  0.8324328   0.84663955  0.81314151  0.78588378  0.84596156  0.84960707
  0.84518621  0.8482191   0.84674743  0.84608276  0.83933667  0.30071181
  0.82620401  0.14998904  0.83925126  0.84073091  0.77456111  0.76912879
  0.83679195  0.82824905  0.82441312  0.85006218  0.84625997  0.84431082
  0.81849335  0.81339097  0.81016171  0.83693016  0.82655581  0.83189211
  0.85060235  0.79549885  0.850458    0.81339211  0.8106713   0.80244637
  0.83517014  0.83881322  0.84379736  0.83257465  0.80148801  0.11082359
 -0.20787526  0.25041918  0.72313602  0.1626212   0.77828527]

Nilai paling bagus adalah 1 dan nilai paling jelek adalah -1. Nilai mendekati 0 menunjukkan klaster yang tumpang tindih.

v_measure Score

In [97]:
from sklearn.metrics import v_measure_score
print(v_measure_score(Y, y_apc))
0.05136362301784874

Skor antara 0.0 sampai dengan 1.0. Skor 1.0 menunjukkan labelisasi total

In [98]:
import pandas as pd
import matplotlib.pyplot as plt
import pandas_datareader as rd
from pandas import datetime

start=datetime(2019,1,1)
end=datetime(2019,7,11)

Data harga saham merupakan salah satu contoh data time series. Analisis data time series biasanya menggunakan metode Auto Regressive Integrated Moving Averaging (ARIMA), Fourier Transform, Markov Chain, and Wavelets analysis.

Autocorrelation

Plot autokorelasi ( Box dan Jenkins) adalah alat yang biasa digunakan untuk memeriksa keacakan dalam set data. Keacakan ini dipastikan dengan menghitung autokorelasi untuk nilai data pada berbagai jeda waktu. Jika acak, autokorelasi seperti itu harus mendekati nol untuk setiap dan semua pemisahan jeda waktu. Jika tidak acak, maka satu atau lebih autokorelasi akan secara signifikan tidak nol. Selain itu, plot autokorelasi digunakan dalam tahap identifikasi model untuk autoregresif Box-Jenkins , model deret waktu rata-rata bergerak.

image.png

Berikut ini adalah contoh plot autokorelasi. Plot autokorelasi yang tidak menunjukkan korelasi dan keacakan otomatis yang signifikan. Kesimpulan plot yang didapat dari plot di atas adalah sebagai berikut:

  • Tidak ada autokorelasi yang signifikan.
  • Datanya acak. Perhatikan bahwa dengan pengecualian lag 0, yang selalu 1 menurut definisi, hampir semua autokorelasi berada dalam batas kepercayaan 95%. Selain itu, tidak ada pola yang jelas (seperti dua puluh lima positif dan dua puluh lima negatif). Tidak munculnya pola untuk melihat apakah data itu sebenarnya acak. Beberapa keluar sedikit di luar batas kepercayaan 95% dan 99% tidak selalu mengindikasikan ketidakteraturan. Untuk interval kepercayaan 95%, sekitar satu dari dua puluh lag menjadi signifikan secara statistik karena fluktuasi acak.

Tidak ada kemampuan asosiatif untuk menyimpulkan dari nilai saat ini Y i untuk nilai selanjutnya Y i + 1. Non-asosiasi semacam itu adalah esensi keacakan. Singkatnya, pengamatan yang berdekatan tidak "saling berhubungan", jadi kdisimpulkan kurva di atas menggambarkan kasus "tidak ada autokorelasi".

rolling (n).mean()

Rolling(n) pada Python mengacu pada metode Moving Averaging (MA) dengan n merupakan jumlah data yang dirata-rata. Notasi MA ( q ) mengacu pada model rata-rata bergerak dari urutan q :

image.png

di mana μ adalah mean dari seri, θ 1 , ..., θ q adalah parameter dari model dan ε t , ε t -1 , ..., ε t -q adalah white noise istilah kesalahan. Nilai q disebut urutan model MA. Ini dapat ditulis secara ekivalen dalam hal operator backshift B sebagai

image.png

Dengan demikian, model rata-rata bergerak secara konseptual merupakan regresi linier dari nilai saat ini dari seri terhadap persyaratan kesalahan white noise saat ini dan sebelumnya (yang diamati) atau guncangan acak. Guncangan acak di setiap titik diasumsikan saling independen dan berasal dari distribusi yang sama, biasanya distribusi normal , dengan lokasi nol dan skala konstan.

Box Plot

Dalam statistik deskriptif , plot kotak atau boxplot adalah metode untuk menggambarkan secara grafis kelompok data numerik melalui kuartilnya . Box plot mungkin juga memiliki garis-garis memanjang secara vertikal dari kotak ( kumis ) menunjukkan variabilitas luar kuartil atas dan bawah, maka istilah kotak-dan-kumis petak dan kotak-dan-kumis diagram . Pencilan dapat diplot sebagai poin individual. Plot kotak non-parametrik : plot ini menampilkan variasi dalam sampel populasi statistik tanpa membuat asumsi apa pun dari distribusi statistik yang mendasarinya(Meskipun boxplot Tukey mengasumsikan simetri untuk kumis dan normalitas untuk panjangnya). Jarak antar bagian kotak yang berbeda menunjukkan tingkat dispersi (sebaran) dan kemiringan dalam data, dan menunjukkan outlier . Selain poin itu sendiri, mereka memungkinkan seseorang untuk memperkirakan berbagai estimasi L- secara visual , terutama kisaran interkuartil , midhinge , jangkauan , mid-range , dan trimean . Petak kotak dapat digambar secara horizontal atau vertikal. Petak kotak menerima namanya dari kotak di tengah.

In [99]:
asii=rd.DataReader('ASII.jk','yahoo',start,end)
asii=asii.drop('Volume', axis=1)
asii.plot(figsize=(9,6))
asii.rolling(10).mean().plot(figsize=(9,6))
Out[99]:
<matplotlib.axes._subplots.AxesSubplot at 0x104fab2c438>
In [100]:
asii.plot(kind='box', figsize=(9,6))
Out[100]:
<matplotlib.axes._subplots.AxesSubplot at 0x104fa7eba90>
In [101]:
plt.figure(figsize=(18,6))
plt.subplot(121)
plt.plot(asii['Close']-(asii['Close'].mean()))
plt.title('Selisih Harga dikurangi Nilai Rata-rata')
plt.subplot(122)
plt.plot(asii['Adj Close']-(asii['Adj Close'].rolling(10).mean())) 
plt.title('Selisih Harga dikurangi Nilai Moving Averaging')
Out[101]:
Text(0.5, 1.0, 'Selisih Harga dikurangi Nilai Moving Averaging')
In [102]:
from pandas.plotting import autocorrelation_plot
plt.figure(figsize=(9,6))
autocorrelation_plot(asii)
Out[102]:
<matplotlib.axes._subplots.AxesSubplot at 0x104fab65278>
In [103]:
indf=rd.DataReader('INDF.jk','yahoo',start,end)
indf=indf.drop('Volume', axis=1)
indf.plot(figsize=(9,6))
indf.rolling(10).mean().plot(figsize=(9,6))
Out[103]:
<matplotlib.axes._subplots.AxesSubplot at 0x104fb1732b0>
In [104]:
indf.plot(kind='box', figsize=(9,6))
Out[104]:
<matplotlib.axes._subplots.AxesSubplot at 0x104fb241048>
In [105]:
plt.figure(figsize=(18,6))
plt.subplot(121)
plt.plot(indf['Close']-(indf['Close'].mean()))
plt.title('Selisih Harga dikurangi Nilai Rata-rata')
plt.subplot(122)
plt.plot(indf['Adj Close']-(indf['Adj Close'].rolling(10).mean()))
plt.title('Selisih Harga dikurangi Nilai Moving Averaging')
Out[105]:
Text(0.5, 1.0, 'Selisih Harga dikurangi Nilai Moving Averaging')
In [106]:
from pandas.plotting import autocorrelation_plot
plt.figure(figsize=(9,6))
autocorrelation_plot(indf)
Out[106]:
<matplotlib.axes._subplots.AxesSubplot at 0x104faf9cb38>
In [107]:
jpfa=rd.DataReader('JPFA.jk','yahoo',start,end)
jpfa=jpfa.drop('Volume', axis=1)
jpfa.plot(figsize=(9,6))
jpfa.rolling(10).mean().plot(figsize=(9,6))
Out[107]:
<matplotlib.axes._subplots.AxesSubplot at 0x104fc689908>
In [108]:
jpfa.plot(kind='box', figsize=(9,6), title='BoxPlot')
Out[108]:
<matplotlib.axes._subplots.AxesSubplot at 0x104fc539b70>
In [109]:
plt.figure(figsize=(18,6))
plt.subplot(121)
plt.plot(jpfa['Close']-(jpfa['Close'].mean()))
plt.title('Selisih Harga dikurangi Nilai Rata-rata')
plt.subplot(122)
plt.plot(jpfa['Adj Close']-(jpfa['Adj Close'].rolling(10).mean()))
plt.title('Selisih Harga dikurangi Nilai Moving Averaging')
Out[109]:
Text(0.5, 1.0, 'Selisih Harga dikurangi Nilai Moving Averaging')
In [110]:
from pandas.plotting import autocorrelation_plot
plt.figure(figsize=(9,6))
autocorrelation_plot(jpfa)
Out[110]:
<matplotlib.axes._subplots.AxesSubplot at 0x104fcd5a940>
In [111]:
cpin=rd.DataReader('CPIN.jk','yahoo',start,end)
cpin=cpin.drop('Volume', axis=1)
cpin.plot(figsize=(9,6))
cpin.rolling(10).mean().plot(figsize=(9,6))
Out[111]:
<matplotlib.axes._subplots.AxesSubplot at 0x104fcb95860>
In [112]:
cpin.plot(kind='box', figsize=(9,6))
Out[112]:
<matplotlib.axes._subplots.AxesSubplot at 0x104fcb20fd0>
In [113]:
plt.figure(figsize=(18,6))
plt.subplot(121)
plt.plot(cpin['Close']-(cpin['Close'].mean()))
plt.title('Selisih Harga dikurangi Nilai Rata-rata')
plt.subplot(122)
plt.plot(cpin['Adj Close']-(cpin['Adj Close'].rolling(10).mean()))
plt.title('Selisih Harga dikurangi Nilai Moving Averaging')
Out[113]:
Text(0.5, 1.0, 'Selisih Harga dikurangi Nilai Moving Averaging')
In [114]:
from pandas.plotting import autocorrelation_plot
plt.figure(figsize=(9,6))
autocorrelation_plot(cpin)
Out[114]:
<matplotlib.axes._subplots.AxesSubplot at 0x104fcc237b8>